#ifndef __OC_VolumeDef_H__
#define __OC_VolumeDef_H__

#if defined(_MSC_VER)
#ifndef OCVolume_EXPORTS
#define _volumeExport  __declspec(dllimport)
#else
#define _volumeExport  __declspec(dllexport)
#endif
#else
#define _volumeExport
#endif

#include "OCMain/StringUtil.h"

namespace OCPP
{
    namespace Volume
    {
        struct w3dmheader
        {
            char magic[4];
            unsigned int version;
            unsigned int byteLength;
            unsigned int featureTableJSONByteLength;
            unsigned int featureTableBinaryByteLength;
        };
        class VolumeOptions;
        class VolumeGridData;
        class VolumeWriter;
        class VolumeD3Writer;
        class VolumeJsonWriter;

        class GridFileReader;
        using GridFileReaderPtr = std::shared_ptr<GridFileReader>;
        using GridFileReaderWeakPtr = std::weak_ptr<GridFileReader>;
        class GridDataValue;
        using GridDataValuePtr = std::shared_ptr<GridDataValue>;
        class GridVariable;
        using GridVariablePtr = std::shared_ptr<GridVariable>;


        class GridDataReader;
        using GridDataReaderPtr = std::shared_ptr<GridDataReader>;
        
        using MissingValue = std::optional<float>;
    }
}

#define GL_RG 0x8227
#ifndef GL_RGB
#define GL_RED                            0x1903
#define GL_GREEN                          0x1904
#define GL_BLUE                           0x1905
#define GL_ALPHA                          0x1906
#define GL_RGB                            0x1907
#define GL_RGBA                           0x1908
#define GL_LUMINANCE                      0x1909
#define GL_LUMINANCE_ALPHA                0x190A

#define GL_BYTE                           0x1400
#define GL_UNSIGNED_BYTE                  0x1401
#define GL_SHORT                          0x1402
#define GL_UNSIGNED_SHORT                 0x1403
#define GL_INT                            0x1404
#define GL_UNSIGNED_INT                   0x1405
#define GL_FLOAT                          0x1406
#define GL_2_BYTES                        0x1407
#define GL_3_BYTES                        0x1408
#define GL_4_BYTES                        0x1409
#define GL_DOUBLE                         0x140A
#define GL_HALF_FLOAT_CesiumUse          0x8D61 //OES_vertex_half_float 
//#define GL_HALF_FLOAT 0x140B
typedef unsigned int GLenum;
#endif // !GL_RGB

#endif